using System;
using System.Collections.Generic;
using Neturion.Dados;
using Neturion.IRepositorios;
using NHibernate;

namespace Neturion.Repositorios
{
    public class RepositorioSituacaoCheque : IRepositorioSituacaoCheque 
    {
        public SituacaoCheque Inserir(SituacaoCheque situacaoCheque)
        {
            GerenciadorBDConfigs.Instance.SessaoAtual().Save(situacaoCheque);
            return situacaoCheque;
        }

        public SituacaoCheque Atualizar(SituacaoCheque situacaoCheque)
        {
            SituacaoCheque situacaoChequeTmp = ObterPorId(situacaoCheque.SituacaoChequeId);

            situacaoChequeTmp.Cheque = situacaoCheque.Cheque;
            situacaoChequeTmp.DataSituacao = situacaoCheque.DataSituacao;
            situacaoChequeTmp.EnumSituacaoCheque = situacaoCheque.EnumSituacaoCheque;
            
            situacaoChequeTmp.ListaMotivosSituacaoCheque.Clear();
            foreach (MotivoSituacaoCheque motivoSituacaoCheque in situacaoCheque.ListaMotivosSituacaoCheque)
            {
                situacaoChequeTmp.AdicionarMotivoSituacaoCheque(motivoSituacaoCheque);
            }

            GerenciadorBDConfigs.Instance.SessaoAtual().Merge(situacaoChequeTmp);
            return situacaoChequeTmp;
        }

        public void Excluir(SituacaoCheque situacaoCheque)
        {
            GerenciadorBDConfigs.Instance.SessaoAtual().Delete(situacaoCheque);
        }

        public IList<SituacaoCheque> ObterTodos()
        {
            ICriteria criteria = GerenciadorBDConfigs.Instance.SessaoAtual().CreateCriteria(typeof(SituacaoCheque));
            return criteria.List<SituacaoCheque>() as List<SituacaoCheque>;
        }

        public SituacaoCheque ObterPorId(int id)
        {
            return GerenciadorBDConfigs.Instance.SessaoAtual().Get<SituacaoCheque>(id);
        }
    }
}